package main

/**
 * @Author: DengLibin
 * @Date: Create in 2023-01-11 11:27:15
 * @Description:同构字符串
 给定两个字符串 s 和 t ，判断它们是否是同构的。

如果 s 中的字符可以按某种映射关系替换得到 t ，那么这两个字符串是同构的。

每个出现的字符都应当映射到另一个字符，同时不改变字符的顺序。不同字符不能映射到同一个字符上，相同字符只能映射到同一个字符上，字符可以映射到自己本身。

 示例 1:

输入：s = "egg", t = "add"
输出：true
示例 2：

输入：s = "foo", t = "bar"
输出：false
示例 3：

输入：s = "paper", t = "title"
输出：true
*/

/**
 * @Author: DengLibin
 * @Date: Create in 2023-01-11 11:27:17
 * @Description: 是否是同构字符串 思路: 双向映射
 */
func isIsomorphic(s string, t string) bool {
	if len(s) != len(t) {
		return false
	}
	arr1 := []rune(s)
	arr2 := []rune(t)
	m12 := make(map[rune]rune, len(arr1))
	m21 := make(map[rune]rune, len(arr1))
	var c1 rune
	var c2 rune
	for i := 0; i < len(arr1); i++ {
		c1 = arr1[i]
		c2 = arr2[i]
		c2_2, ok := m12[c1]
		if ok && c2_2 != c2 {
			return false
		}
		c1_1, ok := m21[c2]
		if ok && c1_1 != c1 {
			return false
		}
		m12[c1] = c2
		m21[c2] = c1

	}
	return true
}
